登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: golang 中 ioutil.ReadDir 的结果进行自定义排序     [回主站]     [分站链接]
golang 中 ioutil.ReadDir 的结果进行自定义排序
clq
浏览(235) - 2018-01-13 12:25:25 发表 编辑

关键字: golang

golang 中 ioutil.ReadDir 的结果进行自定义排序

golang 中可以用 ioutil.ReadDir 读取一个目录下的所有文件名. 令人惊奇的是有人声称这个结果是经过排序的,我用 liteide 跳转到源码看了,确实是如此.
代码非常的简单.
--------------------------------------------------
// byName implements sort.Interface.
type byName []os.FileInfo

func (f byName) Len() int           { return len(f) }
func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
func (f byName) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }

// ReadDir reads the directory named by dirname and returns
// a list of directory entries sorted by filename.
func ReadDir(dirname string) ([]os.FileInfo, error) {
    f, err := os.Open(dirname)
    if err != nil {
        return nil, err
    }
    list, err := f.Readdir(-1)
    f.Close()
    if err != nil {
        return nil, err
    }
    sort.Sort(byName(list))
    return list, nil
}
--------------------------------------------------
根据这个原理可以非常容易的写出按文件名的倒序函数,如下

//--------------------------------------------------
//直接来自 ioutil 的排序代码
// byName implements sort.Interface.
type byName []os.FileInfo

func (f byName) Len() int           { return len(f) }
//func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
func (f byName) Less(i, j int) bool { return f[i].Name() > f[j].Name() } //改一个符号就可以变成倒序
func (f byName) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }

//--------------------------------------------------

然后这样用
sort.Sort(byName(fileList));

举一反三,大家很容易写出按日期等排序的代码... golang 的这个设计真是又巧妙又简单.





总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1